Procedure MostrarPedidos(Var PedidosFaltantes: TP_PedidosFaltantes);
Const
	ERRORVACIO='No hay pedidos que necesiten repuestos';
	CABEZA='Listado de Pedidos que necesitan repuestos';
	ESPACIOS='           ';
	SANGRIA='	';

Var
        PAux: TP_PedidosFaltantes;
	x: Byte;
	
Begin
       	If (PedidosFaltantes<>Nil) Then 
       	Begin
	        PAux:= PedidosFaltantes;
	        Writeln(CABEZA);
		
		While (PAux<>Nil) do 
		Begin
		        Writeln('Número de Pedido: ', PAux^.NumPedido);
			Writeln(SANGRIA, 'Cód. de Repuesto   Cant. Faltante');
			
			For x:= 1 to 10 Do 
			Begin
				Write(SANGRIA);
				Writeln(PAux^.RtosFaltantes[x].CodRepuesto, ESPACIOS, PAux^.RtosFaltantes[x].CantFaltante);
			End;
			
			Writeln();
			PAux:=PAux^.sgte;		
		End;
		End 
		Else 
		        Writeln(ERRORVACIO);
End;

Procedure MostrarRepuestos(Var RepuestosFaltantes:TP_RepuestosFaltantes);
Const
	ERRORVACIO='No hay repuestos faltantes en pedidos';
	CABEZA='Listado de Repuestos con los pedidos que los necesitan';
	ESPACIOS='         ';
	SANGRIA='	';

Var
	PAux: TP_RepuestosFaltantes;
	PSAux: TP_PedidosFaltantes;
Begin
	If (RepuestosFaltantes <> Nil) Then 
	Begin
	        PAux:= RepuestosFaltantes;
                Writeln(CABEZA);
		While (PAux<>Nil) Do 
		Begin
	                Writeln('Código de Repuesto: ', PAux^.CodRepuesto);
			Writeln(SANGRIA, 'Núm. Pedido  Cant. Faltante');
			PSAux:= PAux^.SubPedidos;
			While (PSAux<>Nil) Do 
			Begin
				Write(ESPACIOS); 
				Writeln(PSAux^.NumPedido, ESPACIOS, PSAux^.CantFaltante);
				PSAux:=PSAux^.sgte;
			End;
					
			Writeln();
			PAux:=PAux^.sgte;
		End;
		End 
	        Else 
	                Writeln(ERRORVACIO);
End;

Procedure VerFaltantesRepuestos(Var PedidosFaltantes: TP_PedidosFaltantes; Var RepuestosFaltantes:TP_RepuestosFaltantes);
Const
    OPCION1='1- Mostrar los pedidos que no se pudieron reparar por falta de repuestos y sus respectivos repuestos';
    OPCION2='2- Mostrar los repuestos que resultaron faltantes y todos los pedidos que lo necesitabanW';
    OPCION3='3- Volver al Menú Principal';
    
Var
	selec: Byte;
Begin
	Writeln(OPCION1);
	Writeln();
	Writeln(OPCION2);
	Writeln();
	Writeln(OPCION3);
	Writeln();
	
	Repeat
	        Readln(selec);

                Case selec Of 
                	1:MostrarPedidos(PedidosFaltantes);
                	2:MostrarRepuestos(RepuestosFaltantes);
                End;
                
        Until selec = 3;
                    
End;

Procedure DestruirListaRepuestos(Var RepuestosFaltantes: TP_RepuestosFaltantes);
Var
	PAux : TP_RepuestosFaltantes;
Begin
	PAux := RepuestosFaltantes;
	
	While (PAux <> Nil) Do 
	Begin
		RepuestosFaltantes := PAux^.sgte;
		DestruirSubPedidosRepuesto(PAux^.SubPedidos);
		Dispose(PAux);
		PAux:= RepuestosFaltantes;
	End;
End;

Procedure DestruirListaPedidos(Var PedidosFaltantes: TP_PedidosFaltantes);
Var
	PAux : TP_PedidosFaltantes;

Begin
	PAux := PedidosFaltantes;
			
	While (PAux <> Nil) Do 
	Begin
		PedidosFaltantes := PAux^.sgte;
		Dispose(PAux);
		PAux:= PedidosFaltantes;
	End;
End;
